<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>
    <script>
        //位置符概念：//【replace】，字符串调用，传参模式，降特定位置都置换为指定的字符串。
        //【0】replace（）方法，调用主体字符串，参数为2参，1参为模式，2参为普通字符串或者一个回调函数。返回值为字符串。
        //2参，如果是字符串，即为直接替换文本。

        // 如果第2个参数是回调函数，每匹配到一个结果就回调一次，每次回调都会传递以下参数：

        // result: 本次匹配到的结果

        // 1,...1,...9: 正则表达式中有几个()，就会传递几个参数，1 1 9分别代表本次匹配中每个()提取的结果，最多9个

        // offset:记录本次匹配的开始位置

        // source:接受匹配的原始字符串
        String.prototype.trim = function() {
            //方式1：降匹配到的每一个结果都有用''替换
            return this.replace(/(^\s+)|(\s+$)/g, function() { //^s+ 表示以空格开头的连续空白字符，s+$ 表示以空格结尾的连续空白字符，加上() 就是将匹配到的结果提取出来，由于是 | 的关系，因此这个表达式最多会match到两个结果集，然后执行两次替换：
                return '';
            });
            //方式2：和方式1的原理相同
            // return this.replace(/(^\s+)|(\s+$)/g,'');
        };
        String.prototype.trim = function() {

            return this.replace(/(^\s+)|(\s+$)/g, function(rs, $1, $2, offset, source) {
                //rs本次匹配到的结果，比如开头的空白匹配到的结果就是''；然后第一个（）提取到的结果是''，第二个（）小括号匹配到的结果是undefined，匹配到的位置就是开头索引0，接受的原始字符串就是' abcd '
                console.log(arguments);
            });

        };
        ' abcd '.trim(); //打印两次。


        //【1】起始符^【脱字符】和结束符$【美元符】
        //^匹配开头，在多行匹配中匹配行开头
        //^匹配开头，在多行匹配中匹配行结尾
        var result = "hello".replace(/^|$/g, "#");
        console.log(result); //#hello#
        //【2】\b和\B【单词边界的概念】
        //\b单词边界具体就是\w和\W之间的位置，包括\w和^之间，\w和$之间的位置。
        var result1 = "[JS] Lesson_01.mp4".replace(/\b/g, "#");
        console.log(result1); //[#JS#] #Lesson_01#.#mp4#【此处注意不是数组形式，就是字符串】

        //【3】(?=p) p字符前面的概念;(?!p)和前面那个相反的意思
        //?=a。是最好理解的，即a前面的那个位置。
        var result = "hello".replace(/(?=l)/g, "#");
        console.log(result); //he#l#lo

        //?!a。这个的意思是，除了上述匹配到的位置，其他的位置都置换为#。
        var result2 = "hello".replace(/(?!l)/g, "#");
        console.log(result2); //#h#ell#o#除了l其他的字符前面都加#
        //【4】位置和空字符的关系【位置可以理解为空字符】。
        "hello" == "" + "h" + "" + "e" + "" + "l" + "" + "l" + "" + "o" + "";
        "hello" == "" + "hello" + "";
        var result3 = /^^hello$$$$/.test("hello");
        console.log(result3); //true
    </script>
</body>

</html>